package com.xpp.yanbi.mq;


import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.nio.charset.StandardCharsets;

public class SingleProducer {

    // 表示要向名为“hello” 的队列发送消息
    private final static String QUEUE_NAME = "hello";

    public static void main(String[] argv) throws Exception {
        // 创建一个 ConnectionFactory 对象，该对象用于创建RabbitMQ服务器的连接
        ConnectionFactory factory = new ConnectionFactory();
        // 设置ConnectionFactory的主机为localhost，表示连接本地运行的RabbitMQ服务
        factory.setHost("localhost");
        // 如果修改了用户名、密码和端口需指定。
        // factory.setUsername();
        // factory.setPassword();
        // factory.setPort();

        // 创建新的连接 和 通道
        // Connection连接是到 RabbitMQ 服务器的物理 TCP 连接。
        // 通道（Channel）的作用：几乎所有的操作（如声明队列、发布消息、消费消息等）都是通过 Channel 来完成的。
        try (Connection connection = factory.newConnection();
             Channel channel = connection.createChannel()) {
            // 声明队列
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            String message = "Hello World!";
            // 发布 message 到指定队列
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8));
            System.out.println(" [x] Sent '" + message + "'");
        }
    }
}